#ifndef HISTORYTABLE_H
#define HISTORYTABLE_H

#include <QWidget>
#include <QTableWidget>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QMessageBox>
#include <QFile>
#include <QTextStream>
#include <QHeaderView>
#include <QFont>
#include <QLabel>
#include <QDateTime>

class HistoryTable : public QWidget
{
    Q_OBJECT

public:
    // 构造函数，支持设置标题、表头以及是否启用输入框和按钮
    explicit HistoryTable(const QString &title = "History Table",
                          const QStringList &headers = QStringList() << "Index" << "Time" << "Event" << "Status",
                          const QList<int>  &colWidths = QList<int> {100, 200, 400, 80},
                          bool enableInputFields = true,
                          bool enableButtons = true,
                          QWidget *parent = nullptr);

    // 添加事件
    void addEvent(int index, const QString &time, const QString &event, int status);

    // 保存数据到文件
    bool saveToFile(const QString &filePath);

    // 从文件加载数据
    bool loadFromFile(const QString &filePath);

    // 清空表格
    void clearTable();

    // 设置表格标题
    void setTitle(const QString &title);

    // 设置表头
    void setHeaders(const QStringList &headers);

    // 设置是否启用输入框
    void setInputFieldsEnabled(bool enabled);

    // 设置是否启用按钮
    void setButtonsEnabled(bool enabled);

signals:
    // 信号：当事件被添加时触发
    void eventAdded(int index, const QString &time, const QString &event, int status);

private slots:
    void onAddEventButtonClicked();
    void onSaveButtonClicked();
    void onLoadButtonClicked();

private:
    // 控件
    QTableWidget *tableWidget;
    QVector<QVector<QString>> tableData; // 动态多维数组

    QLineEdit *eventNameLineEdit;
    QLineEdit *eventDateLineEdit;
    QPushButton *addEventButton;
    QPushButton *saveButton;
    QPushButton *loadButton;
    QLabel *titleLabel;

    // 布局
    QVBoxLayout *mainLayout;
    QHBoxLayout *inputLayout;
    QHBoxLayout *buttonLayout;

    // 初始化函数
    void initializeUI();
    void initializeTable();
    void initializeInputFields();
    void initializeButtons();
    void initializeLayouts();

    // 显示弹窗
    void showMessage(const QString &title, const QString &message);

    // 表格标题
    QString tableTitle;
    QStringList tableHeaders;
    QList<int> columnWidths;

    // 是否启用输入框和按钮
    bool inputFieldsEnabled;
    bool buttonsEnabled;

    // 查找事件索引号对应的行
    int findRowByIndex(int index);
};

#endif // HISTORYTABLE_H
